const router = require('express').Router();// 分发请求
const { v4: uuidv4 } = require('uuid');// 生成id (随机字符串)
const userModel = require('../../model/userModel');// 执行sql语句的模块
const aes = require('../../common/aes');//加密的工具
const Jwt = require('../../common/token/jwt');//处理token的工具 json web token

// 注册
// 加密密码（保护用户数据） 有邮箱验证 (辩别用户的真实性)
// URL: /api/user/register
// 参数：user_name, user_phone, user_pwd,user_email
//  注册(用户名，用户联系电话，密码，注册时间，邮箱（可选）)
router.post('/register', async (req, res) => {
    // 获取前端提交的参数
    let { user_name, user_phone, user_pwd, user_email } = req.body;
    // 为了减少报错 做一层判断
    if (user_phone == undefined || user_phone == '' || user_pwd == undefined || user_pwd == '') {
        res.send({
            code: -1,
            msg: '缺少参数，请重新填写。'
        })
    }
    // 注册账号
    // 用户注册的时间
    let dt = new Date();
    let user_register_time = dt.toLocaleDateString() + " " + dt.toLocaleTimeString(); // 2023/11/06 15:01:00
    // 加密密码
    user_pwd = aes.aesEncrypt(user_pwd);
    // 调用函数进行注册
    await userModel.register(user_name, user_phone, user_pwd, user_register_time,user_email)
        .then(
            (data) => {
                // 注册成功
                res.send(data)
            },
            (err) => {
                // 注册失败
                res.send(err)
            }
        )

})

// 登录
// URL: /api/user/login
// 参数：user_phone , user_pwd
router.post('/login', async (req, res) => {
    // 接收前端的参数
    let { user_phone, user_pwd } = req.body;
    // 为了减少报错 做一层判断
    if (user_phone == undefined || user_phone == '' || user_pwd == undefined || user_pwd == '') {
        res.send({
            code: -1,
            msg: '缺少参数，请重新填写。'
        })
        return;
    }
    // 调用登录的api
    await userModel.login(user_phone).then(
        (data) => {
            // user_pwd: 用户提交的密码
            // data[0].user_pwd： 数据库的随机字符串
            console.log('2.0', data);
            // console.log('3.0',aes.aesDecrypt(user_pwd, data[0].user_pwd));//返回的结果是布尔值， true 表示匹配正确，false匹配错误
            // 处理登录 参数1：用户提交的密码 ， 参数2： 数据库的加密密码
            if (data[0]) {
                if (aes.aesDecrypt(user_pwd, data[0].user_pwd)) {
                    // 生成token (临时身份) 
                    let user_id = data[0].user_id;
                    let jsonwebtoken = new Jwt(user_id);
                    // 追踪用户的登录状态
                    let token = jsonwebtoken.getToken();

                    // 登录成功
                    res.send({
                        code: 200,
                        msg: '登录成功。',
                        user_phone,
                        user_name: data[0].user_name,
                        token
                    })
                }
                else {
                    // 账号或密码错误
                    res.send({
                        code: -1,
                        msg: '账号或密码错误。'
                    })
                }
            }
            else {
                res.send({
                    code: 404,
                    msg: '该账号不存在。请先注册~~~'
                })
            }
        },
        (err) => {
            // 执行失败
        }
    )
})

// 判断用户是否为登录中状态
// URL: /api/user/isLogin
// 参数： token
router.post('/isLogin', async (req, res) => {
    // 获取token
    let token = req.body.token || req.headers.token;
    // 验证token
    let result = new Jwt(token).verifyToken();
    console.log('4.0', result);
    if (result.code == 200) {
        res.send({
            code: 200,
            msg: '在线状态。'
        })
    }
    else {
        res.send({
            code: -1,
            msg: '登录失效,请重新登录。'
        })
    }

})

// 获取用户信息
// URL: /api/user/info
// 参数：token
router.post('/info', async (req, res) => {
    let token = req.body.token || req.headers.token;
    let result = new Jwt(token).verifyToken()
    if (result.code == 200) {
        // 登录状态
        // console.log('y.1',result)
        // console.log('y.2',user_id)
        let user_id = result.info.data;//用户id
        // 获取用户信息
        await userModel.info(user_id).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }
    else {
        // 不是登录状态
        res.send({
            code: -1,
            msg: '您还没有登录哦。'
        })
    }
})

// 注销账号(删除账号)
// URL: /api/user/remove
// 参数：token, user_phone
router.post('/remove', async (req, res) => {
    let token = req.body.token || req.headers.token;
    let user_phone = req.body.user_phone;
    let result = new Jwt(token).verifyToken()
    if (result.code == 200) {
        // 登录状态
        let user_id = result.info.data;//用户id
        // 获取用户信息
        await userModel.remove(user_phone, user_id).then(
            (content) => {
                // 响应数据给前端
                res.send(content)
            },
            (err) => {
                res.send(err)
            }
        )
    }
    else {
        // 不是登录状态
        res.send({
            code: -1,
            msg: '您还没有登录哦。'
        })
    }
})

// 统计所有用户
router.get('/total', async (req, res) => {
    // 获取用户信息
    await userModel.total().then(
        (content) => {
            // 响应数据给前端
            res.send(content)
        },
        (err) => {
            res.send(err)
        }
    )
})

// 修改用户资料
// 参数:token user_name
router.post('/modify_name', async (req, res) => {
    let token = req.body.token || req.headers.token;
    let result = new Jwt(token).verifyToken()
    if (result.code == 200) {
        let { user_name } = req.body;
        if (user_name) {
            // 登录状态
            let user_id = result.info.data;//用户id
            // 修改用户信息
            await userModel.modify_name(user_id, user_name).then(
                (content) => {
                    // 响应数据给前端
                    res.send(content)
                },
                (err) => {
                    res.send(err)
                }
            )
        }
        else {
            res.send({
                code: -1,
                msg: '缺少参数。'
            })
        }

    }
    else {
        // 不是登录状态
        res.send({
            code: -1,
            msg: '您还没有登录哦。'
        })
    }
})
module.exports = router;